// Token验证中间件
const { UserModel } = require('../models/index')
const jwtUtils = require('../utils/jwtUtils')

module.exports = async (req, res, next) => {
  try {
    // 获取用户传递过来的token
    const token = req.headers.authorization

    // token缺失
    if (!token) {
      return res.status(401).json({ message: 'token缺失' })
    }

    // token格式不正确
    if (!token.startsWith('Bearer ')) {
      return res.status(401).json({ message: 'token格式不正确，请重新登录' })
    }

    // 去除token前缀，获取真正的token
    const realToken = token.split(' ')[1]

    // 验证token，使用await等待验证完成，并且捕获相关错误
    const decoded = await jwtUtils.checkToken(realToken)

    // 检查账号是否被封禁
    if (decoded.user_id) {
      const user = await UserModel.findByPk(decoded.user_id)
      if (!user || user.status === '封禁') {
        return res.status(403).json({
          error: '账号已被封禁'
        })
      }
    }

    req.user = decoded
    next()
  } catch (error) {
    // 处理token过期的情况
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({ message: 'token已经过期，请重新登录' })
    }

    return res.status(403).json({ message: '无效的token' })
  }
}